﻿//1695. 删除子数组的最大得分
//给你一个正整数数组 nums ，请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。
//返回 只删除一个 子数组可获得的 最大得分 。
//如果数组 b 是数组 a 的一个连续子序列，即如果它等于 a[l], a[l + 1], ..., a[r] ，那么它就是 a 的一个子数组。



class Solution
{
public:
    int maximumUniqueSubarray(vector<int>& nums)
    {
        unordered_map<int, int> table;
        int begin = 0, end = -1;
        int sum = 0, ret = 0;
        int n = nums.size();
        for (end = 0; end < n; end++)
        {
            table[nums[end]]++;
            sum += nums[end];
            while (table[nums[end]] > 1)
            {
                table[nums[begin]]--;
                sum -= nums[begin];
                if (table[nums[begin]] == 0) table.erase(nums[begin]);
                begin++;
            }
            ret = max(ret, sum);
        }
        return ret;
    }
};


